/**
 * 添加新节点到指定父节点的子节点列表
 * @param {Array} data - 图层数据数组
 * @param {Object} parentNode - 父节点对象
 * @param {Object} newNode - 新增的节点对象
 */
export function addNode(data, parentNode, newNode) {
    for (const node of data) {
        if (node.id === parentNode.id) {
            if (!node.children) {
                node.children = [];
            }
            node.children.push(newNode);
            return true;
        }
        if (node.children) {
            const added = addNode(node.children, parentNode, newNode);
            if (added) return true;
        }
    }
    return false;
}

/** 删除节点 **/

/**
 * 删除指定节点
 * @param {Array} data - 图层数据数组
 * @param {Object} nodeToDelete - 需要删除的节点对象
 */
export function deleteNode(data, nodeToDelete) {
    for (let i = 0; i < data.length; i++) {
        if (data[i].id === nodeToDelete.id) {
            data.splice(i, 1);
            return true;
        }
        if (data[i].children) {
            const deleted = deleteNode(data[i].children, nodeToDelete);
            if (deleted) return true;
        }
    }
    return false;
}

/** 更新节点 **/

/**
 * 更新指定节点的属性
 * @param {Array} data - 图层数据数组
 * @param {number} nodeId - 需要更新的节点 id
 * @param {Object} newData - 新的节点数据，包含需要更新的属性
 */
export function updateNode(data, nodeId, newData) {
    for (let i = 0; i < data.length; i++) {
        if (data[i].id === nodeId) {
            data[i] = { ...data[i], ...newData };
            return true;
        }
        if (data[i].children) {
            const updated = updateNode(data[i].children, nodeId, newData);
            if (updated) return true;
        }
    }
    return false;
}

/** 查询节点 **/

/**
 * 查找指定 id 的节点
 * @param {Array} data - 图层数据数组
 * @param {number} nodeId - 节点的 id
 * @returns {Object|null} - 返回找到的节点对象，找不到返回 null
 */
export function findNode(data, nodeId) {
    for (const node of data) {
      if (node.id === nodeId) return node;
      if (node.children) {
        const found = findNode(node.children, nodeId);
        if (found) return found;
      }
    }
    return null;
}
  